iT邦幫忙

2023 iThome 鐵人賽

DAY 6
0
Modern Web

起步Go!Let's Go!系列 第 6

[ Day 06 ] Go 流程控制 - 要不要?if 就是這個問題

  • 分享至 

  • xImage
  •  

if 是一個用於執行條件判斷的控制結構,如果條件成立,就會執行 if 後面的大括號 ({}) 內的程式區塊,否則就會忽略該程式區塊繼續執行後續的程式。

if

if 條件式{
    若條件式為ture,執行程式區塊
}
package main
import "fmt"
func main() {
    if true {
        fmt.Println("Go")
    }
}

執行結果:
Go

如果改成 false,就不會印出任何東西。

package main
import "fmt"
func main(){
    num := 10
    if (num < 20){
        fmt.Println("Hi~~~~~")
    }
}

執行結果:
Hi~~~~~

if-else

if-else 是用來處理條件分支的結構,這樣就可以根據條件的 true/false 去執行不同的程式碼。

if 條件式{
    若條件式為ture,執行程式區塊
}else{
    若條件式為false,執行程式區塊
}
package main
import "fmt"
func main() {
    if false {
        fmt.Println("Go")
    }else{
        fmt.Println("Not Go")
    }
}

執行結果:
Not Go

package main
import "fmt"
func main(){
    var num int
    num = 5
    if num > 10{
        fmt.Println("Hello")
    }else{
        fmt.Println("Golang")
    }
}

當 num > 10 時:

執行結果:
Hello

當 num < 10 時:

執行結果:
Golang

if-else if-else

如果有多種情況需要判斷,可以用以下方式來處理。

if 條件式一 {
    若條件式一為 ture,執行程式區塊
}else if 條件式二 {
    若條件式二為 ture,執行程式區塊
}else{
    若條件式為 false,執行程式區塊
}

小情境:
ATM 領錢,低於 100 以及高於 10000 不給領。

package main
import "fmt"
func main() {
    var money int
    fmt.Println("請輸入金額:")
    fmt.Scanln(&money)
    if money < 100 {
        fmt.Println("Too Few")
    } else if money <= 10000 {
        fmt.Println("OK!!!")
    } else {
        fmt.Println("Too Much!!!")
    }
    fmt.Println("Done!!!")
}

執行 go build main.go

$ ./main.go
請輸入金額:
50
Too Few
Done!!!

switch - case

當一次要多次比較同一個變數,可以用 switch - case
給一個小情境,當晴天(1)就出去玩,陰天(2)去百貨公司,下雨(3)去地下街,颱風天待在家裡。

package main
import "fmt"
func main(){
    weather := 2
    switch weather {
    case 1:
        fmt.Println("出去玩!")
    case 2:
        fmt.Println("去百貨公司!!")
    case 3:
        fmt.Println("去地下街!!!")
    default:
        fmt.Println("待在家!!!!")
    }
}

執行結果:
去百貨公司!!

default 的功能類似 else,另外在 Go,使用 switch - case 不需要搭配 break

情境二: 晴天跟陰天都出去玩,下雨天跟颱風天都待在家

package main
import "fmt"
func main(){
    weather := 2
    switch weather {
    case 1:
        fmt.Println("出去玩!")
    case 2:
        fmt.Println("出去玩!")
    case 3:
        fmt.Println("待在家!!")
    default:
        fmt.Println("待在家!!")
    }
}

也可以這樣表示:

package main
import "fmt"
func main(){
    num := 2
    switch num {
    case 1,2:
        fmt.Println("出去玩!")
    case 3,4:
        fmt.Println("待在家!!")
    }
}

布林變數

昨天在講比較運算及邏輯運算時都有提到布林值,今天我再細講布林值。
在做比較時,>, ==, <, >=, <=,而這些會產生值,也就是 true, false,而我們稱這個值為布林值(boolean)。

package main
import "fmt"
func main(){
    var a bool
    a = true
    if a {
        fmt.Println("a is true")
    }else{
        fmt.Println("a is false")
    }
}

執行結果:
a is true

如果將 a = true 改成 a = false,那執行的的結果就會是 a is false
來點簡單的條件判斷:

package main
import "fmt"
func main(){
    var a bool
    a = 5 > 7
    if a {
        fmt.Println("it is right!!!")
    }else {
        fmt.Println("it is wrong!!!")
    }
}

執行結果:
it is wrong!!!

會出現這樣的結果是因為這時的 a 做了比較,並且得到 false
5 > 7 就是一種比較的方式,所得到的值就會是布林值。

布林的運算

主要分為 NOT, AND, OR

NOT

簡單來說,就是來顛倒是非的,為甚麼這樣說,因為他會把 truefalsefalsetrue
那要怎麼表示呢?
只要在布林變數前加上 !:

package main
import "fmt"
func main(){
    a := true
    fmt.Println(!a)
    fmt.Printf("%t", !a)
}

執行結果:
false
false

布林變數可以直接印出,若要用 Printf 印出可以用 %t 是指 true
那為甚麼不是用 %b,因為 b 被當作 binary 拿去印二進制了。

AND

兩件事都是對的,結果也會是對的,可以把他想成是「而且」。
但我比較喜歡用數學的方式去記。
大家都學過乘法吧!

0 x 0 = 0
1 x 0 = 0
0 x 1 = 0
1 x 1 = 1

我們把 0 當作 false,1 當作 true:

false x false = false
true x false = flase
false x true = false
true x true = true

那在程式中要怎麼表示,除了python,Go及大多數的程式語言,是用&&來表示。

package main
import "fmt"
func main(){
    fmt.Println(false && false)
    fmt.Println(true && false)
    fmt.Println(false && true)
    fmt.Println(true && true)
}

執行結果:
false
false
false
true

OR

兩件事只要一個是對的,結果就會是對的,可以把他想成是「或者」。
用數學的方式來講解,大家都學過加法吧!

0 + 0 = 0
1 + 0 = 1
0 + 1 = 1
1 + 1 = 1

我們把 0 當作 false,1 當作 true:

false + false = false
true + false = true
false + true = true
true + true = true

那在程式中要怎麼表示,Go及大多數的程式語言,是用||來表示。

package main
import "fmt"
func main(){
    fmt.Println(false || false)
    fmt.Println(true || false)
    fmt.Println(false || true)
    fmt.Println(true || true)
}

執行結果:
false
true
true
true

  • 參考資料:
  1. Golang 流程控制 - if 判斷式 By 彭彭

上一篇
[Day 05 ] Go 運算符號:舞動程式碼的魔杖
下一篇
[ Day 07 ] Go 迴圈 - for 迴圈的魅力
系列文
起步Go!Let's Go!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言